package solution;

import java.util.HashMap;
import java.util.Map;
import java.util.Stack;

public class Solution1 {
//    两数之和
    public int[] twoSum1(int[] nums, int target) {
//        从数组里面找两个符合等于target的东西
//        2 7 11 15
//        找到的同时记录下标并返回
        for (int i = 0; i < nums.length - 1; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[i] + nums[j] == target) {
//                    存入到一个数组里面
                    return new int[] {i, j};
                }
            }

        }
        return null;
    }
//    学一下高效方法
//    使用哈希表进行解决
    public int[] twoSum2(int[] nums, int target) {
        Map<Integer, Integer> hashMap = new HashMap<Integer, Integer>();
        for (int i = 0; i < nums.length; i++) {
//            是否存在这个差值在哈希表里面
            if (hashMap.containsKey(target - nums[i])) {
                return new int[] {hashMap.get(target - nums[i]), i};
            }
//            不存在那么存入哈希表
            hashMap.put(nums[i], i);
        }
            return null;
    }

//    解决有效括号
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            if (ch== '{' || ch== '[' || ch== '(') {
//                进行入栈
                char chs = ch;
                stack.push(ch);
            }else {
//                处理第一个是右括号的情况
                if (stack.isEmpty()) {
                    return false;
                }
//                处理右括号进行校验
                char ch2 = stack.peek();
                if ((ch2 == '{' && ch == '}') || (ch2 == '[' && ch == ']') || (ch2 == '(' && ch == ')')) {
//                    匹配成功，那么将左括号出栈
                    stack.pop();
                }else {
                    return false;
                }

            }
        }
//        如果栈为空那么则是全部匹配
        if (stack.isEmpty()) {
            return true;
        }

        return false;
    }

}
